package com.ys.io.p4Properties集合;

import java.util.*;

/**
 * 描述: Properties了解与使用
 * Java中有个比较重要的类Properties（Java.util.Properties），主要用于读取Java的配置文件，各种语言都有自己所支持的配置文件，配置文件中很多变量是经常改变的，这样做也是为了方便用户，让用户能够脱离程序本身去修改相关的变量设置。
 * 在Java中，其配置文件常为.properties文件，格式为文本文件，文件的内容的格式是“键=值”的格式，文本注释信息可以用"#"来注释。
 * Properties类继承自Hashtable，如下：
 *
 * @author CodeYang
 * @version 2020/12/31 14:22
 */
public class Properties了解与使用 {

    public static void main(String[] args) {
        //Properties 底层是 hashTable
        Properties properties = new Properties();
        // setProperty --> put
        properties.setProperty("北京","中国");
        properties.setProperty("东京","日本");
        properties.setProperty("巴黎","法国");
        //getProperty _. get(只能String) 返回value
        String key01 = properties.getProperty("北京");
        System.out.println(key01);
        /**
         *  这里获取 value 如果 key 找到返回key对应的value --找不到就返回一个默认值哦
         *   public String getProperty(String key, String defaultValue) {
         *         String val = getProperty(key);
         *         return (val == null) ? defaultValue : val;
         *     }
         */
        String key02 = properties.getProperty("北京02", "默认值");

        System.out.println(key02);
        // 调用hashtable的get 返回对应的value
        Object key03 = properties.get("北京");
        System.out.println(key03);
        System.out.println("增强for循环");
        // perpropites 自带的 只返回string类型的 set key集合
        Set<String> set01 = properties.stringPropertyNames();

        Set<Object> objects = properties.keySet();

        System.out.println("=============");
        // 遍历集合的三种方式
        // 在工作一般建议使用 普通for 和增强for循环这样的 迭代器|变量就不会暴露无用的作用域范围可以增强安全性
        //1 : 普通for

        for (Iterator<String> iterator = set01.iterator(); iterator.hasNext(); ){
            String key = iterator.next();
            System.out.println(key+"="+properties.getProperty(key));
        }
        System.out.println("=============");

        // 2: 增强for
        for (String s : set01) {
            System.out.println(s+"="+properties.get(s));
        }
        System.out.println("=============");
        //whiel循环的迭代器
        /**
         * 迭代器在while循环外面定义的，所以它的作用域可以在while循环外面使用，此时在while循环中已经遍历了所有的键值对
         * 此时在循环外面还调用next()方法，编译OK，但是运行期会抛出NoSuchElementException异常(没有找到元素异常)
         * 也就是说：while循环无法在编译期对获取下一个元素做检查,工作中尽量不要使用while循环遍历集合元素(不安全)
         *
         */
        Iterator<String> iterator = set01.iterator();
        while (iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+"="+properties.get(key));
        }
       // iterator.next();
        System.out.println("=============");
        // 遍历所有的 key 与 value 一起,hashMap hashTable 特有的
        for (Map.Entry<Object, Object> objectObjectEntry : properties.entrySet()) {
            //System.out.println(objectObjectEntry);
            System.out.println("key"+objectObjectEntry.getKey()+"="+"value"+objectObjectEntry.getValue());
        }

    }
}
